package com.billdowney.security.voter;

import java.util.Collection;

import javax.annotation.Resource;

import org.springframework.security.access.AccessDecisionVoter;
import org.springframework.security.access.ConfigAttribute;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.FilterInvocation;
import org.springframework.stereotype.Service;

import com.billdowney.dao.user.UserLoginInfoDao;
import com.billdowney.entity.user.UserLoginInfo;
import com.billdowney.service.impl.base.BaseServiceImpl;

@Service
public class UrlAccessVoter extends BaseServiceImpl<UserLoginInfoDao, UserLoginInfo, String>
		implements AccessDecisionVoter<FilterInvocation> {

	@Resource(type = UserLoginInfoDao.class)
	@Override
	public void setDao(UserLoginInfoDao userLoginInfoDao) {
		super.dao = userLoginInfoDao;
	}

	/**
	 * ACCESS_GRANTED – 同意;ACCESS_DENIED – 拒绝;ACCESS_ABSTAIN – 弃权
	 * 
	 * @param authentication
	 * @param filter
	 * @param attributes
	 * @return
	 * @author: 超级小富翁 - BillDowney
	 * @date: 2019年2月11日 下午5:23:05
	 */
	@Override
	public int vote(Authentication authentication, FilterInvocation filter, Collection<ConfigAttribute> attributes) {
		String fullUrl = filter.getFullRequestUrl();// 包含所有套接字的url
		String url = filter.getRequestUrl();// 只含有请求的url
		return ACCESS_ABSTAIN;
	}

	/**
	 * 投票是否支持特定配置属性
	 * 
	 * @param attribute
	 * @return
	 * @author: 超级小富翁 - BillDowney
	 * @date: 2019年2月11日 下午5:21:32
	 */
	@Override
	public boolean supports(ConfigAttribute attribute) {
		return true;
	}

	/**
	 * 投票是否可以为受保护对象类型投票
	 * 
	 * @param clazz
	 * @return
	 * @author: 超级小富翁 - BillDowney
	 * @date: 2019年2月11日 下午5:21:45
	 */
	@Override
	public boolean supports(Class<?> clazz) {
		return true;
	}

}
